package me.boot.gen.table;

import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import lombok.experimental.UtilityClass;
import me.boot.gen.table.service.SysMysqlCreateTableManager;

/**
 * @Description:
 * @author: Sylar
 * @date: 2021年10月11日 10:07 下午
 */
@UtilityClass
public class TableGenerator {

    SysMysqlCreateTableManager manager = SpringUtil.getBean(SysMysqlCreateTableManager.class);

    /**
     * 检查数据库表是否存在
     *
     * @param tableName
     * @return 存在状态
     */
    public boolean existTable(String tableName) {
        return manager.existTable(tableName);
    }

    /**
     * 建单表
     *
     * @param starupMode  建表模式 {@link StarupMode}
     * @param entityClass 实体类型
     */
    public void generateTable(StarupMode starupMode, Class<?> entityClass) {
        String tableName = StringUtils.camelToUnderline(entityClass.getSimpleName());
        generateTable(starupMode, entityClass, tableName);
    }

    /**
     * 建单表
     *
     * @param starupMode  建表模式 {@link StarupMode}
     * @param entityClass 实体类型
     * @param tableName   指定表名
     */
    public void generateTable(StarupMode starupMode, Class<?> entityClass, String tableName) {
        manager.createMysqlTable(starupMode, entityClass, tableName);
    }

    /**
     * 指定包名批量建表
     *
     * @param starupMode 建表模式 {@link StarupMode}
     * @param scanPack   扫描用于创建表的对象的包名，多个包用“,”隔开
     */
    public void generateTable(StarupMode starupMode, String scanPack) {
        manager.createMysqlTable(starupMode, scanPack);
    }

}
